home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 7: Programming / CDAT7.iso / demos / VisualAge for Java 2.0 Entry / setup / data1.cab / ide-e / IDE / cache / 3W9V04 (.txt) < prev    next >
Encoding:
Java Class File  |  1998-09-16  |  13.3 KB  |  496 lines

  1. package com.sun.java.swing;
  2.  
  3. import com.sun.java.accessibility.Accessible;
  4. import com.sun.java.accessibility.AccessibleContext;
  5. import com.sun.java.swing.event.EventListenerList;
  6. import com.sun.java.swing.event.ListDataEvent;
  7. import com.sun.java.swing.event.ListDataListener;
  8. import com.sun.java.swing.plaf.ComboBoxUI;
  9. import java.awt.Component;
  10. import java.awt.Container;
  11. import java.awt.ItemSelectable;
  12. import java.awt.event.ActionEvent;
  13. import java.awt.event.ActionListener;
  14. import java.awt.event.ItemEvent;
  15. import java.awt.event.ItemListener;
  16. import java.awt.event.KeyEvent;
  17. import java.util.Vector;
  18.  
  19. public class JComboBox extends JComponent implements ItemSelectable, ListDataListener, ActionListener, Accessible {
  20.    protected ComboBoxModel dataModel;
  21.    protected ListCellRenderer renderer;
  22.    protected ComboBoxEditor editor;
  23.    protected int maximumRowCount = 8;
  24.    protected boolean isEditable = false;
  25.    protected Object selectedItemReminder = null;
  26.    protected KeySelectionManager keySelectionManager = null;
  27.    protected String actionCommand = "comboBoxChanged";
  28.    protected boolean lightWeightPopupEnabled = true;
  29.    static Class class$java$awt$event$ItemListener;
  30.    static Class class$java$awt$event$ActionListener;
  31.  
  32.    public JComboBox() {
  33.       this.setModel(new DefaultComboBoxModel(this));
  34.       this.installAncestorListener();
  35.       this.updateUI();
  36.    }
  37.  
  38.    public JComboBox(Object[] items) {
  39.       this.setModel(new DefaultComboBoxModel(this, items));
  40.       this.installAncestorListener();
  41.       this.updateUI();
  42.    }
  43.  
  44.    public JComboBox(ComboBoxModel aModel) {
  45.       this.setModel(aModel);
  46.       this.installAncestorListener();
  47.       this.updateUI();
  48.    }
  49.  
  50.    public JComboBox(Vector items) {
  51.       this.setModel(new DefaultComboBoxModel(this, items));
  52.       this.installAncestorListener();
  53.       this.updateUI();
  54.    }
  55.  
  56.    public void actionPerformed(ActionEvent e) {
  57.       Object newItem = this.getEditor().getItem();
  58.       this.getModel().setSelectedItem(newItem);
  59.       this.getUI().hidePopup();
  60.    }
  61.  
  62.    public void addActionListener(ActionListener l) {
  63.       EventListenerList var10000 = super.listenerList;
  64.       Class var10001 = class$java$awt$event$ActionListener;
  65.       if (var10001 == null) {
  66.          try {
  67.             var10001 = Class.forName("java.awt.event.ActionListener");
  68.          } catch (ClassNotFoundException var2) {
  69.             throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  70.          }
  71.  
  72.          class$java$awt$event$ActionListener = var10001;
  73.       }
  74.  
  75.       var10000.add(var10001, l);
  76.    }
  77.  
  78.    public void addItem(Object anObject) {
  79.       this.checkDefaultComboBoxModel();
  80.       ((DefaultComboBoxModel)this.dataModel).addObject(anObject);
  81.    }
  82.  
  83.    public void addItemListener(ItemListener aListener) {
  84.       EventListenerList var10000 = super.listenerList;
  85.       Class var10001 = class$java$awt$event$ItemListener;
  86.       if (var10001 == null) {
  87.          try {
  88.             var10001 = Class.forName("java.awt.event.ItemListener");
  89.          } catch (ClassNotFoundException var2) {
  90.             throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  91.          }
  92.  
  93.          class$java$awt$event$ItemListener = var10001;
  94.       }
  95.  
  96.       var10000.add(var10001, aListener);
  97.    }
  98.  
  99.    void checkDefaultComboBoxModel() {
  100.       if (!(this.dataModel instanceof DefaultComboBoxModel)) {
  101.          throw new InternalError("Cannot use this method with a custom data model.");
  102.       }
  103.    }
  104.  
  105.    public void configureEditor(ComboBoxEditor anEditor, Object anItem) {
  106.       anEditor.setItem(anItem);
  107.    }
  108.  
  109.    public void contentsChanged(ListDataEvent e) {
  110.       ComboBoxModel mod = this.getModel();
  111.       Object newSelectedItem = mod.getSelectedItem();
  112.       if (!this.isEditable() && mod instanceof DefaultComboBoxModel && newSelectedItem == null && this.getModel().getSize() > 0) {
  113.          this.setSelectedIndex(0);
  114.       } else if (this.selectedItemReminder == null) {
  115.          if (newSelectedItem != null) {
  116.             this.selectedItemChanged();
  117.          }
  118.       } else if (!this.selectedItemReminder.equals(newSelectedItem)) {
  119.          this.selectedItemChanged();
  120.       }
  121.  
  122.       if (!this.isEditable() && newSelectedItem != null) {
  123.          boolean shouldResetSelectedItem = true;
  124.          Object selectedItem = mod.getSelectedItem();
  125.          int i = 0;
  126.  
  127.          for(int c = mod.getSize(); i < c; ++i) {
  128.             Object o = mod.getElementAt(i);
  129.             if (o.equals(selectedItem)) {
  130.                shouldResetSelectedItem = false;
  131.                break;
  132.             }
  133.          }
  134.  
  135.          if (shouldResetSelectedItem) {
  136.             if (mod.getSize() > 0) {
  137.                this.setSelectedIndex(0);
  138.             } else {
  139.                this.setSelectedItem((Object)null);
  140.             }
  141.          }
  142.       }
  143.  
  144.    }
  145.  
  146.    protected KeySelectionManager createDefaultKeySelectionManager() {
  147.       return new DefaultKeySelectionManager(this);
  148.    }
  149.  
  150.    protected void fireActionEvent() {
  151.       ActionEvent e = null;
  152.       Object[] listeners = super.listenerList.getListenerList();
  153.  
  154.       for(int i = listeners.length - 2; i >= 0; i -= 2) {
  155.          Object var10000 = listeners[i];
  156.          Class var10001 = class$java$awt$event$ActionListener;
  157.          if (var10001 == null) {
  158.             try {
  159.                var10001 = Class.forName("java.awt.event.ActionListener");
  160.             } catch (ClassNotFoundException var4) {
  161.                throw new NoClassDefFoundError(((Throwable)var4).getMessage());
  162.             }
  163.  
  164.             class$java$awt$event$ActionListener = var10001;
  165.          }
  166.  
  167.          if (var10000 == var10001) {
  168.             if (e == null) {
  169.                e = new ActionEvent(this, 1001, this.getActionCommand());
  170.             }
  171.  
  172.             ((ActionListener)listeners[i + 1]).actionPerformed(e);
  173.          }
  174.       }
  175.  
  176.    }
  177.  
  178.    protected void fireItemStateChanged(ItemEvent e) {
  179.       Object[] listeners = super.listenerList.getListenerList();
  180.  
  181.       for(int i = listeners.length - 2; i >= 0; i -= 2) {
  182.          Object var10000 = listeners[i];
  183.          Class var10001 = class$java$awt$event$ItemListener;
  184.          if (var10001 == null) {
  185.             try {
  186.                var10001 = Class.forName("java.awt.event.ItemListener");
  187.             } catch (ClassNotFoundException var4) {
  188.                throw new NoClassDefFoundError(((Throwable)var4).getMessage());
  189.             }
  190.  
  191.             class$java$awt$event$ItemListener = var10001;
  192.          }
  193.  
  194.          if (var10000 == var10001) {
  195.             ((ItemListener)listeners[i + 1]).itemStateChanged(e);
  196.          }
  197.       }
  198.  
  199.    }
  200.  
  201.    public AccessibleContext getAccessibleContext() {
  202.       if (super.accessibleContext == null) {
  203.          super.accessibleContext = new AccessibleJComboBox(this);
  204.       }
  205.  
  206.       return super.accessibleContext;
  207.    }
  208.  
  209.    public String getActionCommand() {
  210.       return this.actionCommand;
  211.    }
  212.  
  213.    public ComboBoxEditor getEditor() {
  214.       return this.editor;
  215.    }
  216.  
  217.    public Object getItemAt(int index) {
  218.       return this.dataModel.getElementAt(index);
  219.    }
  220.  
  221.    public int getItemCount() {
  222.       return this.dataModel.getSize();
  223.    }
  224.  
  225.    public KeySelectionManager getKeySelectionManager() {
  226.       return this.keySelectionManager;
  227.    }
  228.  
  229.    public int getMaximumRowCount() {
  230.       return this.maximumRowCount;
  231.    }
  232.  
  233.    public ComboBoxModel getModel() {
  234.       return this.dataModel;
  235.    }
  236.  
  237.    public ListCellRenderer getRenderer() {
  238.       return this.renderer;
  239.    }
  240.  
  241.    public int getSelectedIndex() {
  242.       Object sObject = this.dataModel.getSelectedItem();
  243.       int i = 0;
  244.  
  245.       for(int c = this.dataModel.getSize(); i < c; ++i) {
  246.          Object obj = this.dataModel.getElementAt(i);
  247.          if (obj.equals(sObject)) {
  248.             return i;
  249.          }
  250.       }
  251.  
  252.       return -1;
  253.    }
  254.  
  255.    public Object getSelectedItem() {
  256.       return this.dataModel.getSelectedItem();
  257.    }
  258.  
  259.    public Object[] getSelectedObjects() {
  260.       Object selectedObject = this.getSelectedItem();
  261.       if (selectedObject == null) {
  262.          return new Object[0];
  263.       } else {
  264.          Object[] result = new Object[1];
  265.          result[0] = selectedObject;
  266.          return result;
  267.       }
  268.    }
  269.  
  270.    public ComboBoxUI getUI() {
  271.       return (ComboBoxUI)super.ui;
  272.    }
  273.  
  274.    public String getUIClassID() {
  275.       return "ComboBoxUI";
  276.    }
  277.  
  278.    public void hidePopup() {
  279.       this.getUI().hidePopup();
  280.    }
  281.  
  282.    public void insertItemAt(Object anObject, int index) {
  283.       this.checkDefaultComboBoxModel();
  284.       ((DefaultComboBoxModel)this.dataModel).insertObjectAt(anObject, index);
  285.    }
  286.  
  287.    protected void installAncestorListener() {
  288.       ((JComponent)this).addAncestorListener(new 1(this));
  289.    }
  290.  
  291.    public void intervalAdded(ListDataEvent e) {
  292.       this.contentsChanged(e);
  293.    }
  294.  
  295.    public void intervalRemoved(ListDataEvent e) {
  296.       this.contentsChanged(e);
  297.    }
  298.  
  299.    public boolean isEditable() {
  300.       return this.isEditable;
  301.    }
  302.  
  303.    public boolean isFocusTraversable() {
  304.       return this.getUI().isFocusTraversable();
  305.    }
  306.  
  307.    public boolean isLightWeightPopupEnabled() {
  308.       return this.lightWeightPopupEnabled;
  309.    }
  310.  
  311.    public boolean isOpaque() {
  312.       return true;
  313.    }
  314.  
  315.    public void processKeyEvent(KeyEvent e) {
  316.       if (e.getKeyCode() == 9) {
  317.          this.hidePopup();
  318.       }
  319.  
  320.       super.processKeyEvent(e);
  321.    }
  322.  
  323.    public void removeActionListener(ActionListener l) {
  324.       EventListenerList var10000 = super.listenerList;
  325.       Class var10001 = class$java$awt$event$ActionListener;
  326.       if (var10001 == null) {
  327.          try {
  328.             var10001 = Class.forName("java.awt.event.ActionListener");
  329.          } catch (ClassNotFoundException var2) {
  330.             throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  331.          }
  332.  
  333.          class$java$awt$event$ActionListener = var10001;
  334.       }
  335.  
  336.       var10000.remove(var10001, l);
  337.    }
  338.  
  339.    public void removeAllItems() {
  340.       this.checkDefaultComboBoxModel();
  341.       ((DefaultComboBoxModel)this.dataModel).removeAllObjects();
  342.       if (!this.isEditable()) {
  343.          this.setSelectedItem((Object)null);
  344.       }
  345.  
  346.    }
  347.  
  348.    public void removeItem(Object anObject) {
  349.       this.checkDefaultComboBoxModel();
  350.       int index = ((DefaultComboBoxModel)this.dataModel).getIndexOf(anObject);
  351.       ((DefaultComboBoxModel)this.dataModel).removeObject(anObject);
  352.       if (!this.isEditable() && this.dataModel.getSize() > 0 && index < this.dataModel.getSize()) {
  353.          this.setSelectedIndex(index);
  354.       }
  355.  
  356.    }
  357.  
  358.    public void removeItemAt(int anIndex) {
  359.       this.checkDefaultComboBoxModel();
  360.       ((DefaultComboBoxModel)this.dataModel).removeObjectAt(anIndex);
  361.    }
  362.  
  363.    public void removeItemListener(ItemListener aListener) {
  364.       EventListenerList var10000 = super.listenerList;
  365.       Class var10001 = class$java$awt$event$ItemListener;
  366.       if (var10001 == null) {
  367.          try {
  368.             var10001 = Class.forName("java.awt.event.ItemListener");
  369.          } catch (ClassNotFoundException var2) {
  370.             throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  371.          }
  372.  
  373.          class$java$awt$event$ItemListener = var10001;
  374.       }
  375.  
  376.       var10000.remove(var10001, aListener);
  377.    }
  378.  
  379.    protected void selectedItemChanged() {
  380.       if (this.selectedItemReminder != null) {
  381.          this.fireItemStateChanged(new ItemEvent(this, 701, this.selectedItemReminder, 2));
  382.       }
  383.  
  384.       this.selectedItemReminder = this.getModel().getSelectedItem();
  385.       if (this.selectedItemReminder != null) {
  386.          this.fireItemStateChanged(new ItemEvent(this, 701, this.selectedItemReminder, 1));
  387.       }
  388.  
  389.       this.fireActionEvent();
  390.    }
  391.  
  392.    public boolean selectWithKeyChar(char keyChar) {
  393.       if (this.keySelectionManager == null) {
  394.          this.keySelectionManager = this.createDefaultKeySelectionManager();
  395.       }
  396.  
  397.       int index = this.keySelectionManager.selectionForKey(keyChar, this.getModel());
  398.       if (index != -1) {
  399.          this.setSelectedIndex(index);
  400.          return true;
  401.       } else {
  402.          return false;
  403.       }
  404.    }
  405.  
  406.    public void setActionCommand(String aCommand) {
  407.       this.actionCommand = aCommand;
  408.    }
  409.  
  410.    public void setEditable(boolean aFlag) {
  411.       boolean didChange = aFlag != this.isEditable;
  412.       this.isEditable = aFlag;
  413.       if (didChange) {
  414.          ((JComponent)this).firePropertyChange("editable", !this.isEditable, this.isEditable);
  415.       }
  416.  
  417.    }
  418.  
  419.    public void setEditor(ComboBoxEditor anEditor) {
  420.       ComboBoxEditor oldEditor = this.editor;
  421.       if (this.editor != null) {
  422.          this.editor.removeActionListener(this);
  423.       }
  424.  
  425.       this.editor = anEditor;
  426.       if (this.editor != null) {
  427.          this.editor.addActionListener(this);
  428.       }
  429.  
  430.       ((JComponent)this).firePropertyChange("editor", oldEditor, this.editor);
  431.    }
  432.  
  433.    public void setEnabled(boolean b) {
  434.       super.setEnabled(b);
  435.       ((JComponent)this).firePropertyChange("enabled", !((Component)this).isEnabled(), ((Component)this).isEnabled());
  436.    }
  437.  
  438.    public void setKeySelectionManager(KeySelectionManager aManager) {
  439.       this.keySelectionManager = aManager;
  440.    }
  441.  
  442.    public void setLightWeightPopupEnabled(boolean aFlag) {
  443.       this.lightWeightPopupEnabled = aFlag;
  444.    }
  445.  
  446.    public void setMaximumRowCount(int count) {
  447.       int oldCount = this.maximumRowCount;
  448.       this.maximumRowCount = count;
  449.       ((JComponent)this).firePropertyChange("maximumRowCount", oldCount, this.maximumRowCount);
  450.    }
  451.  
  452.    public void setModel(ComboBoxModel aModel) {
  453.       ComboBoxModel oldModel = this.dataModel;
  454.       if (this.dataModel != null) {
  455.          this.dataModel.removeListDataListener(this);
  456.       }
  457.  
  458.       this.dataModel = aModel;
  459.       ((JComponent)this).firePropertyChange("model", oldModel, this.dataModel);
  460.       this.dataModel.addListDataListener(this);
  461.       ((Container)this).invalidate();
  462.    }
  463.  
  464.    public void setRenderer(ListCellRenderer aRenderer) {
  465.       ListCellRenderer oldRenderer = this.renderer;
  466.       this.renderer = aRenderer;
  467.       ((JComponent)this).firePropertyChange("renderer", oldRenderer, this.renderer);
  468.       ((Container)this).invalidate();
  469.    }
  470.  
  471.    public void setSelectedIndex(int anIndex) {
  472.       int size = this.dataModel.getSize();
  473.       if (anIndex >= 0 && anIndex < size) {
  474.          this.setSelectedItem(this.dataModel.getElementAt(anIndex));
  475.       } else {
  476.          throw new IllegalArgumentException("setSelectedIndex: " + anIndex + " out of bounds");
  477.       }
  478.    }
  479.  
  480.    public void setSelectedItem(Object anObject) {
  481.       this.dataModel.setSelectedItem(anObject);
  482.    }
  483.  
  484.    public void setUI(ComboBoxUI ui) {
  485.       super.setUI(ui);
  486.    }
  487.  
  488.    public void showPopup() {
  489.       this.getUI().showPopup();
  490.    }
  491.  
  492.    public void updateUI() {
  493.       this.setUI((ComboBoxUI)UIManager.getUI(this));
  494.    }
  495. }
  496.